/**
 * CrudImageUploader 组件类型定义
 */

/**
 * 上传模式枚举
 */
export type UploadMode = 'immediate' | 'delayed'

/**
 * 预览样式配置接口
 */
export interface PreviewConfig {
  /** 预览容器宽度 */
  width?: number | string
  /** 预览容器高度 */
  height?: number | string
  /** 是否圆形预览 */
  round?: boolean
  /** 是否显示边框 */
  border?: boolean
  /** 边框颜色 */
  borderColor?: string
  /** 背景颜色 */
  backgroundColor?: string
}

/**
 * 文件验证配置接口
 */
export interface ValidationConfig {
  /** 允许的文件类型 */
  allowedTypes?: string[]
  /** 最大文件大小（MB） */
  maxSize?: number
  /** 最小文件大小（MB） */
  minSize?: number
  /** 最大宽度（像素） */
  maxWidth?: number
  /** 最大高度（像素） */
  maxHeight?: number
  /** 最小宽度（像素） */
  minWidth?: number
  /** 最小高度（像素） */
  minHeight?: number
}

/**
 * 上传配置接口
 */
export interface UploadConfig {
  /** 上传接口URL */
  action?: string
  /** 上传请求头 */
  headers?: Record<string, string>
  /** 上传参数 */
  data?: Record<string, string | number | boolean>
  /** 文件字段名 */
  name?: string
  /** 是否携带cookie */
  withCredentials?: boolean
  /** 超时时间（毫秒） */
  timeout?: number
}

/**
 * 上传进度信息接口
 */
export interface UploadProgress {
  /** 上传百分比 */
  percent: number
  /** 已上传字节数 */
  loaded: number
  /** 总字节数 */
  total: number
  /** 上传速度（字节/秒） */
  speed?: number
}

/**
 * 上传结果接口
 */
export interface UploadResult {
  /** 是否成功 */
  success: boolean
  /** 服务器返回的文件URL */
  url?: string
  /** 错误信息 */
  error?: string
  /** 服务器响应数据 */
  response?: Record<string, unknown>
}

/**
 * 文件信息接口
 */
export interface FileInfo {
  /** 文件对象 */
  file: File
  /** 文件名 */
  name: string
  /** 文件大小 */
  size: number
  /** 文件类型 */
  type: string
  /** 本地预览URL */
  previewUrl: string
  /** 服务器URL */
  serverUrl?: string
  /** 上传状态 */
  status: 'pending' | 'uploading' | 'success' | 'error'
  /** 上传进度 */
  progress?: UploadProgress
  /** 错误信息 */
  error?: string
}

/**
 * 组件Props接口
 */
export interface CrudImageUploaderProps {
  /** 当前图片URL */
  modelValue?: string
  /** 上传模式 */
  mode?: UploadMode
  /** 是否禁用 */
  disabled?: boolean
  /** 是否只读 */
  readonly?: boolean
  /** 预览配置 */
  previewConfig?: PreviewConfig
  /** 验证配置 */
  validationConfig?: ValidationConfig
  /** 上传配置 */
  uploadConfig?: UploadConfig
  /** 占位符文本 */
  placeholder?: string
  /** 提示文本 */
  tip?: string
  /** 是否显示删除按钮 */
  showDelete?: boolean
  /** 是否显示重试按钮 */
  showRetry?: boolean
  /** 自定义上传函数 */
  customUpload?: (file: File) => Promise<UploadResult>
}

/**
 * 组件Emits接口
 */
export interface CrudImageUploaderEmits {
  /** 更新modelValue */
  'update:modelValue': [value: string]
  /** 文件选择事件 */
  'file-select': [fileInfo: FileInfo]
  /** 上传开始事件 */
  'upload-start': [fileInfo: FileInfo]
  /** 上传进度事件 */
  'upload-progress': [progress: UploadProgress, fileInfo: FileInfo]
  /** 上传成功事件 */
  'upload-success': [result: UploadResult, fileInfo: FileInfo]
  /** 上传失败事件 */
  'upload-error': [error: string, fileInfo: FileInfo]
  /** 文件删除事件 */
  'file-delete': [fileInfo: FileInfo]
  /** 验证失败事件 */
  'validation-error': [error: string, file: File]
}
